﻿using PhraseCorrector.Common;
using PhraseCorrector.SpellCore;
using PhraseCorrector.SpellCorrect;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;

namespace PhraseCorrector.SpellLook
{
    internal class PhraseSpell
    {

        /// <summary>
        /// 拼音校正方法
        /// </summary>
        /// <param name="input">输入的拼音字符串</param>
        /// <param name="model">语言模型，可以是中文、英文或拼音</param>
        /// <returns>返回一个ECResult对象，包含校正后的中文、英文、拼音以及相似度评分</returns>
        public PhraseResult Spell(string input, PhraseType model)
        {
            // 创建一个编辑距离比较器，使用DamerauOSA算法
            var distanceComparer = new EditDistance(EditDistance.DistanceAlgorithm.DamerauOSA);

            // 将输入字符串转换为字符数组
            var ss = input.ToCharArray();

            // 从拼音字典中查找与输入字符串最相似的词汇
            var item = PinyinSpell.SpellHandle.Wordlibrary
                .Select(x => (x.Key, somplary: distanceComparer.Similarity(input, x.Key)))
                .Where(x => x.somplary > 0.3)
                .OrderByDescending(x => x.somplary);

            // 根据语言模型返回相应的校正结果
            return new PhraseResult()
            {
                Chinese = model == PhraseType.Chinese ? item.First().Key : "",
                Words = model == PhraseType.English ? item.First().Key : "",
                Score = item.First().somplary,
            };
        }
    }
}
